import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '@/store/index'
import { checkToken, myActions } from "@/api/login"
Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: '/HomeView'
  },
  {
    // 首页
    path: '/HomeView',
    name: 'HomeView',
    meta: {
      id: 186,
      nav: ['首页']
    },
    component: () => import('../views/HomeView.vue'),
    children: [
      {
        // 角色管理
        path: "/RoleManage",
        component: () => import("../views/RoleManage.vue"),
        meta: {
          id: 4,
          nav: ['首页', '管理员/权限', '角色管理']
        },
      },
      {
        // 管理员列表
        path: "/ManageList",
        component: () => import("../views/ManageList.vue"),
        meta: {
          id: 5,
          nav: ['首页', '管理员/权限', '管理员列表']
        },
      },
      {
        // banner管理
        path: "/BannerManage",
        component: () => import("../views/BannerManage.vue"),
        meta: {
          id: 14,
          nav: ['首页', '系统设置', 'Banner管理']
        },
      },
      {
        // 单页管理
        path: "/SinglepageManage",
        component: () => import("../views/SinglepageManage.vue"),
        meta: {
          id: 20,
          nav: ['首页', 'CMS模块', '单页管理']
        },
      },
      {
        // 公告管理
        path: "/AnnouncementManage",
        component: () => import("../views/AnnouncementManage.vue"),
        meta: {
          id: 21,
          nav: ['首页', 'CMS模块', '公告管理']
        },
      },
      {
        // 商品分类
        path: "/CommodityManage",
        component: () => import("../views/CommodityManage.vue"),
        meta: {
          id: 1122,
          nav: ['首页', '商城管理', '商品分类']
        },
      },
      {
        // 规格尺寸
        path: "/SpecificationManage",
        component: () => import("../views/SpecificationManage.vue"),
        meta: {
          id: 78,
          nav: ['首页', '商城管理', '规格尺寸']
        },
      },
      {
        // 商品管理
        path: "/MerchandiseManage",
        component: () => import("../views/MerchandiseManage.vue"),
        meta: {
          id: 43,
          nav: ['首页', '商城管理', '商品管理']
        },
      },

      //角色管理 添加角色
      {
        path: '/RoleManageAdd',
        name: 'RoleManageAdd',
        component: () => import('@/views/RoleManageAdd.vue'),
        meta: {
          id: 4,
          nav: ["首页", "管理员/权限", "添加角色"]
        }
      },
      //商城管理 规格尺寸
      {
        path: '/SizeManageAdd',
        name: 'SizeManageAdd',
        component: () => import('@/views/SizeManageAdd.vue'),
        meta: {
          id: 4,
          nav: ["首页", "商城管理", "规格尺寸"]
        }
      },
      //商城管理 商品分类添加
      {
        path: '/CategoryListAdd',
        name: 'CategoryListAdd',
        component: () => import('@/views/CategoryListAdd.vue'),
        meta: {
          id: 4,
          nav: ["首页", "商城管理", "商品分类"]
        }
      },
      //公告管理 添加公告
      {
        path: '/AnnouncementManageAdd',
        name: 'AnnouncementManageAdd',
        component: () => import('@/views/AnnouncementManageAdd.vue'),
        meta: {
          id: 4,
          nav: ["首页", "CMS模块", "添加公告"]
        }
      },
      //单页管理 添加单页
      {
        path: '/SinglePageAdd',
        name: 'SinglePageAdd',
        component: () => import('@/views/SinglePageAdd.vue'),
        meta: {
          id: 4,
          nav: ["首页", "CMS模块", "添加单页"]
        }
      }

    ]
  },



  {
    path: '/LoginView',
    name: 'LoginView',
    component: () => import('../views/LoginView.vue')
  },
  {
    path: '/error',
    name: 'error',
    component: () => import('../views/ErrorView.vue')
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

router.beforeEach(async (to, from, next) => {
  // 1.是否登录
  // 2.登录是否过期
  // 3.是否有权限
  // to 去哪
  // from  来自哪
  // next  是否通过
  let token = sessionStorage.getItem("token")
  // 调用vuex方法获取权限列表
  if (token) {
    // 获取检测的标识---来自于vuex
    if (store.state.check) { //已经检测了
      // 如果登陆了，去的是登录页，就不放行，去home页
      if (to.path == "/LoginView") { //去登陆
        next("/HomeView")
      } else { //去的页面不是登陆
        // 当前路由权限的id，去匹配当前用户的权限组
        // 判断是否有权限
        if (store.state.roles.indexOf(to.meta.id) == -1) { //没有权限
          next("/error")
        } else {
          next()
        }
      }
    } else { //没有检测
      // 如果检验不同，则清除缓存中token，然后退户已登录页
      let res = await checkToken()
      if (res.code === 0) { //检测成功
        store.commit("changeCheck")
        const { data: res } = await myActions()
        // console.log(res);
        store.commit("updateRole", res.map(item => item.id))
        // console.log(store.state.roles);
        next()
      } else { //检测失败
        sessionStorage.removeItem("token")
        next("/LoginView")
      }
    }
  } else { //没有登陆
    // 是否去登陆页面
    if (to.path == "/LoginView") {
      next()
    } else {
      // 如果不是登陆页面，就不通过，去登陆页面
      next("/LoginView")
    }
  }
})
